import matplotlib.pyplot as plt
import numpy as np
import sympy as sp

'''
微分在数学中的定义：由函数B=f(A)，得到A、B两个数集
，在A中当dx靠近自己时，函数在dx处的极限叫作函数在dx处的微分
，微分的中心思想是无穷分割。
'''
def f(x):
    return x**2

plt.figure(figsize=(12,6))
n = np.linspace(-10,10,num = 50)
plt.plot(n,f(n))
plt.xlim(-11,11)
plt.ylim(-10,110)
plt.plot([-5,f(-5)],[3,f(3)],color = "r")
print('直线斜率为%.2f' % ((f(3)-f(-5))/(3+5)))

#斜率
# y = k * x + b
def ds(xm,offset):
    y = f(xm)
    y1 = f(xm+offset)
    return (y1-y)/offset

for i in np.linspace(1,10,num=100,endpoint=False):
    print('偏移%.5f个单位距离时，斜率为：%.5f' % (i,ds(2,i)))


# 斜率为4   点（2,4） 算出 y = 4x - 4
# n = np.linspace(-10,10,num = 50)
# plt.plot(n, 4*n-4)

x0 = 4
n = np.linspace(-10,10,num = 50)
plt.scatter(x0,f(x0)) #在函数f(x), x=2时画点

# 求 x**2 斜率方程
# @ 原函数 ：y=x0**2
# @ 导函数 ：y=2*x0
# @ 切线方程：Y = 导函数*(X - x0) + 原函数

plt.plot(n, 2*x0*(n-x0)+(x0**2)) # 切线方程：Y = 导函数*(X - x0) + 原函数
plt.show()
